#pragma once
#include <iostream>
#include <map>
#include <spdlog/logger.h>
#include "BaseType.h"
#include "Singleton.h"
#include "StrUtil.h"

#define LOGGER_INFO(name,fmt,args...)   {libembx::SpdLogger::getInstance().logInfo(name,libemb::StrUtil::stringFormat(fmt,##args));}
#define LOGGER_ERROR(name,fmt,args...)  {libembx::SpdLogger::getInstance().logError(name,libemb::StrUtil::stringFormat(fmt,##args));}

namespace libembx{
using namespace libemb;
class SpdLogger:public Singleton<SpdLogger>{
DECL_CLASSNAME(SpdLogger)
DECL_SINGLETON(SpdLogger)
public:
    virtual ~SpdLogger();
    bool init(const std::string& logDir);
    /**
     * @brief 创建日志
     * @param name 日志名称
     * @param limitSize 日志文件最大大小,默认为10M
     * @param rotations 循环日志文件个数,默认为0个
     * @return int 
     */
    bool createLog(const std::string& name,uint32 limitSize=10485760,uint32 rotations=0);
    /**
     * @brief 记录INFO日志(普通日志)
     * @param name 日志名称
     * @param info 日志内容
     */
    void logInfo(const std::string& name, const std::string& info);
    /**
     * @brief 记录ERROR日志(错误日志)
     * @param name 日志名称
     * @param error 日志内容
     */
    void logError(const std::string& name, const std::string& error);
private:
    std::string m_logDir{"."};
    std::map<std::string,std::shared_ptr<spdlog::logger>> m_logMap;
};
}